// 封装优先级队列
function PriorityQueue() {
  this.items = [];

  // 类不类: 类里面封装类
  function QueueElement(element, priority) {
    this.element = element;
    this.priority = priority;
  };

  // 实现插入方法
  PriorityQueue.prototype.enqueue = (element, priority) => {
    // 1. 创建一个 QueueElement 对象
    const queueElement = new QueueElement(element, priority);
    const queueLen = this.items.length;
    // 判断是否添加了
    let added = false;

    // 2. 如果队列为空
    if (!queueLen) {
      this.items.push(queueElement);
      return;
    }

    // 3. 判断优先级进行排序
    for (let i = 0; i < queueLen; i++) {
      // 3.1. 当前插入元素优先级比队列中的某个元素优先级小, 插入对应位置
      if (queueElement.priority < this.items[i].priority) {
        this.items.splice(i, 0, queueElement);
        added = true;
        break;
      }
    }

    // 4. 如果走完循环还是没有找到比当前插入元素优先级大的, 那么当前元素优先级最大, 放到最后
    if (!added) this.items.push(queueElement);
  }

  // 2. 在队列中删除前端元素
  PriorityQueue.prototype.dequeue = () => this.items.shift();

  // 3. 查看前端元素
  PriorityQueue.prototype.front = () => this.items[0];

  // 4. 查看队列是否为空
  PriorityQueue.prototype.isEmpty = () => !this.items.length;
}

// 使用
const pQ = new PriorityQueue();


pQ.enqueue("我爱你", 10);
pQ.enqueue("真的？", 1);
pQ.enqueue("假的？", 20);

// pQ.dequeue();


console.log(pQ);

